/*@author cerimice*/
package Persistencia.Fachada;

import Persistencia.Definicion.Usuario;

import java.util.logging.Logger;
import javax.persistence.Persistence;
import javax.persistence.EntityManager;
import javax.persistence.Query;

public class UsuarioFachada
    {
     private EntityManager em;
    
    public UsuarioFachada()
        {}
    
    private EntityManager getEntityManager()
        {return Persistence.createEntityManagerFactory(Sistema.Configuracion.getUnidadDePersistencia()).createEntityManager();}                
    
    public boolean agregar(String nombre, String paterno, String materno, String direccion, int estado, int municipio, String codigoPostal, String telefonoFijo, String telefonoMovil, String email, String usuario, String password, int permiso) throws Exception
        {
        try
            {
            em = getEntityManager();
            em.getTransaction().begin();
                Usuario obj = new Usuario();
                obj.setNombre(nombre.toUpperCase());
                obj.setPaterno(paterno.toUpperCase());
                obj.setMaterno(materno.toUpperCase());
                obj.setDireccion(direccion.toUpperCase());
                obj.setEstado(estado);
                obj.setMunicipio(municipio);
                obj.setCodigoPostal(codigoPostal.toUpperCase());
                obj.setTelefonoFijo(telefonoFijo.toUpperCase());
                obj.setTelefonoMovil(telefonoMovil.toUpperCase());
                obj.setEmail(email);
                obj.setUsuario(usuario);
                obj.setPassword(password);
                obj.setPermiso(permiso);
            em.persist(obj);
            em.getTransaction().commit();
            em.close();
            return true;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public boolean modificar(String clave, String nombre, String paterno, String materno, String direccion, int estado, int municipio, String codigoPostal, String telefonoFijo, String telefonoMovil, String email, String usuario, String password, int permiso) throws Exception
        {
        try
            {
            em = getEntityManager();
            em.getTransaction().begin();
                Usuario obj = em.find(Usuario.class,clave);
                if(obj == null){return false;}
                obj.setNombre(nombre.toUpperCase());
                obj.setPaterno(paterno.toUpperCase());
                obj.setMaterno(materno.toUpperCase());
                obj.setDireccion(direccion.toUpperCase());
                obj.setEstado(estado);
                obj.setMunicipio(municipio);
                obj.setCodigoPostal(codigoPostal.toUpperCase());
                obj.setTelefonoFijo(telefonoFijo);
                obj.setTelefonoMovil(telefonoMovil);
                obj.setEmail(email);
                obj.setUsuario(usuario);
                obj.setPassword(password);
                obj.setPermiso(permiso);
            em.persist(obj);
            em.getTransaction().commit();
            em.close();
            return true;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public Usuario obtener(String clave) throws Exception
        {
        try
            {
            em = getEntityManager();
            em.getTransaction().begin();
            Usuario obj = em.find(Usuario.class,clave);
            em.getTransaction().commit();
            em.close();
            return obj;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public Usuario obtenerPorUsuario(String nombreUsuario) throws Exception
        {
        try
            {
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("usuario.buscarUsuario");
                consulta.setParameter("valor",nombreUsuario);
            if(consulta.getResultList().isEmpty())
                {return null;}
            else
                {return (Usuario)consulta.getResultList().get(0);}
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public boolean validarUsuario(String nombreUsuario) throws Exception
        {
        try
            {
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("usuario.buscarUsuario");
                consulta.setParameter("valor",nombreUsuario);
            return consulta.getResultList().isEmpty();
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    }
